/*
							Copyright (C) 2010  Alourien Team
									
						This file is part of the Alourien Engine.

    The Alourien Engine is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    The Alourien Engine is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with the Alourien Engine.  If not, see <http://www.gnu.org/licenses/>.
	
 *File Name:Quaternion.h
 *Programmer Name:Jose Castellano
 *Date of Last Update: 10/22/2010
 *
 *Purpose:This Program is to create a four dimensional 
 * Quaternion to be used in later programs
 *
 *Basic Info:It includes the Quaternion set function which allows to
 * set all four values at once. Needs the Quaternions Header.
 *
 *UPDATES:
 *1)Created the Program and documentation.
 *  Date:10/22/2010 Updater: Jose Castellano
 *
 *
 */

#ifndef _QUATERNION_H
#define _QUATERNION_H 1

namespace Alourien
{
	class Quaternion
	{
	private:
		//Object coordinates
		float x; // This is the X value of the Quaternion
		float y; // This is the Y value of the Quaternion
		float z; // This is the Z value of the Quaternion
		float w; // This is the W value of the Quaternion

	public:
		Quaternion(void);
		~Quaternion(void);

		//Mutators and Accessors
		float getX(){return this->x;}
		void setX(float value) {this->x = value;}
		float getY(){return this->y;}
		void setY(float value) {this->y = value;}
		float getZ(){return this->z;}
		void setZ(float value) {this->z = value;}
		float getW(){return this->w;}
		void setW(float value) {this->w = value;}        

		//This function is to get the values and set them into the Quaternion
		//It allows for a faster initialization, rather than setting in the main
		//using four lines of code.
		void QuaternionSet(float xValue, float yValue, float zValue, float wValue);

	};
};

#endif 